﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CapaPresentacion.Commands;
using CapaPresentacion.Vistas;
using Entidades;
using CapaLogica;
using System.Windows.Input;
using System.Windows;
using System.Windows.Data;
using System.Transactions;

namespace CapaPresentacion.Vistas
{
    class VentanaPeriodoPagoCuotaViewModel
    {

        public event ReiniciarCU ReiniciarCU;

        public event PagoCuotaAlumno PagoCuotaAlumno;
        private RelayCommand buscarAlumnosCommand;
        private string año;
        private string mes;
        public List<ViewEntity> ListaMeses { get; set; }

        private VentanaPeriodoPagoCuota view;

        public ICommand BuscarAlumnosCommand
        {
            get
            {
                return buscarAlumnosCommand;
            }
        }

        public string Año
        {
            get { return año; }
            set { año = value; }

        }

        public string Mes
        {
            get { return mes; }
            set { mes = value; }

        }

        public VentanaPeriodoPagoCuotaViewModel() { }

         public bool Inicializar(VentanaPeriodoPagoCuota vista) 
         {
             this.view = vista;

             if (new VigenciaParametroLogica().ObtenerCuotaVigente() != "NO")
             {


                 this.año = DateTime.Now.Year.ToString();

                 ListaMeses = new List<ViewEntity>();
                 ListaMeses.Add(new ViewEntity("Enero"));
                 ListaMeses.Add(new ViewEntity("Febrero"));
                 ListaMeses.Add(new ViewEntity("Marzo"));
                 ListaMeses.Add(new ViewEntity("Abril"));
                 ListaMeses.Add(new ViewEntity("Mayo"));
                 ListaMeses.Add(new ViewEntity("Junio"));
                 ListaMeses.Add(new ViewEntity("Julio"));
                 ListaMeses.Add(new ViewEntity("Agosto"));
                 ListaMeses.Add(new ViewEntity("Septiembre"));
                 ListaMeses.Add(new ViewEntity("Octubre"));
                 ListaMeses.Add(new ViewEntity("Noviembre"));
                 ListaMeses.Add(new ViewEntity("Diciembre"));



                 this.buscarAlumnosCommand = new RelayCommand(BuscarAlumnosNuevoPago);

                 return true;
             }
             else
             {
                 VentanaAviso nueva = new VentanaAviso(true, "Se ha producido un error", "Debe establecer el valor de la cuota");
                 nueva.ShowDialog();
                 this.ReiniciarCU(CasosDeUso.NuevoParametroGeneral);
                 
                 return false;

             }

         }

         public void BuscarAlumnosNuevoPago(object parameter)
         {
             if (Validaciones())
             {
                 this.PagoCuotaAlumno(this.Mes, Convert.ToInt32(this.año));
                 this.view.Close();

             }


         }

       
         internal bool Validaciones()
         {

             if (this.año.Length != 4)
             {
                 VentanaAviso nueva = new VentanaAviso(true, "Se ha producido un error", "El campo 'Año' ha sido ingresado de forma incorrecta");

                 nueva.ShowDialog();
                 return false;

             }
             
             if (String.IsNullOrWhiteSpace(this.mes))
             {
                 VentanaAviso nueva = new VentanaAviso(true, "Se ha producido un error", "Debe seleccionar un mes");
                 nueva.ShowDialog();
                 return false;
             }

             CicloLectivo ciclo = new CicloLectivoLogica().ObtenerEntidad(Convert.ToInt32(this.año));

             if (ciclo.FechaDesde.Value.Month > ObtenerNumeroMes(this.mes))
             {
                 VentanaAviso nueva = new VentanaAviso(true, "Se ha producido un error", "El mes del pago de cuota debe estar contenido dentro del período del ciclo lectivo");
                 nueva.ShowDialog();
                 return false;

             }

             if (ciclo.FechaHasta.Value.Month < ObtenerNumeroMes(this.mes))
             {
                 VentanaAviso nueva = new VentanaAviso(true, "Se ha producido un error", "El mes del pago de cuota debe estar contenido dentro del período del ciclo lectivo");
                 nueva.ShowDialog();
                 return false;

             }


             if (!new PagarCuotaAlumnoLogica().ExistenCuotasPendientes(this.mes, Convert.ToInt32(this.año)))
             {
                 VentanaAviso nueva = new VentanaAviso(true, "Se ha producido un error", "No existen pagos de cuota pendientes para el mes y año seleccionado");
                 nueva.ShowDialog();
                 return false;
             }


             return true;
         }



         internal int ObtenerNumeroMes(string mes)
         {

             switch (mes)
             {

                 case "Enero":
                     return 1;

                 case "Febrero":
                     return 2;

                 case "Marzo":
                     return 3;

                 case "Abril":
                     return 4;

                 case "Mayo":
                     return 5;

                 case "Junio":
                     return 6;

                 case "Julio":
                     return 7;

                 case "Agosto":
                     return 8;

                 case "Septiembre":
                     return 9;

                 case "Octubre":
                     return 10;

                 case "Noviembre":
                     return 11;

                 case "Diciembre":
                     return 12;

                 default: return 0;

             }


         }

         internal string ObtenerNombreMes(int mes)
         {

             switch (mes)
             {

                 case 1:
                     return "Enero";

                 case 2:
                     return "Febrero";

                 case 3:
                     return "Marzo";

                 case 4:
                     return "Abril";

                 case 5:
                     return "Mayo";

                 case 6:
                     return "Junio";

                 case 7:
                     return "Julio";

                 case 8:
                     return "Agosto";

                 case 9:
                     return "Septiembre";

                 case 10:
                     return "Octubre";

                 case 11:
                     return "Noviembre";

                 case 12:
                     return "Diciembre";

                 default: return "Ninguno";

             }

         }




    }
}
